package com.smart.agent.remote;

import com.smart.agent.bean.remote.RemoteBean;
import com.smart.agent.tools.json.JsonHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 远程控制抽象类，所有需要远程控制的都要继承这个类
 * 所有子类只要在 work 方法中实现自己的业务即可
 */
public abstract class Remote {
    private static final Logger logger = LoggerFactory.getLogger(Remote.class);

    protected RemoteBean remoteBean;

    public RemoteBean getRemoteBean() {
        return remoteBean;
    }

    public void setRemoteBean(RemoteBean remoteBean) {
        this.remoteBean = remoteBean;
    }

    /**
     * 构造函数
     * @param action 远程控制需要执行的内容
     */
    public Remote(JsonHelper action) {
        this.remoteBean = action.getBean(RemoteBean.class, "$");
    }

    /**
     * 执行状态
     * @return
     */
    public boolean isStatus() {
        return this.remoteBean.isStatus();
    }

    /**
     * 执行远程控制
     * @return
     */
    public boolean execute() {
        remoteBean.setStart(System.currentTimeMillis());
        logger.info("开始远程调用：" + remoteBean);
        boolean ret = work();
        remoteBean.setStop(System.currentTimeMillis());
        if (ret) {
            logger.info("结束远程调用-成功：" + remoteBean);
        } else {
            logger.error("结束远程调用-失败：" + remoteBean);
        }
        return ret;
    }

    /**
     * 抽象方法，这里是真正要做的业务
     * @return
     */
    protected abstract boolean work();

}


